#ifdef use_opencv
#include <cv.h>
// #ifdef DEBUG
// #endif
#pragma comment(lib,"opencv_core220d.lib");
#define opencv_gemm64FC(definef_a,definef_b,definef_mo,defienf_i)             \
{                                                                             \
	CvMat* cf=cvCreateMat(definef_a.Rows(),definef_a.Cols(),CV_64FC1);        \
	cvCopy(&cvMat(cf->rows,cf->cols,CV_64FC1,&definef_a[0][0]),cf);           \
	CvMat* cd=cvCreateMat(definef_b.Rows(),definef_b.Cols(),CV_64FC1);        \
	cvCopy(&cvMat(cd->rows,cd->cols,CV_64FC1,&definef_b[0][0]),cd);           \
	assert(defienf_i==1||defienf_i==2||defienf_i==0);                         \
	CvMat* cr=NULL;															  \
	if (defienf_i==1)														  \
{																			  \
	cr=cvCreateMat(definef_a.Cols(),definef_b.Cols(),CV_64FC1);               \
	cvGEMM(cf,cd,1,NULL,0,cr,CV_GEMM_A_T);                                    \
	definef_mo=MatrixC(cr->rows,cr->cols,(double*)(cr->data.db));             \
}																			  \
	if(defienf_i==2)                                                          \
{                                                                             \
	cr=cvCreateMat(definef_a.Rows(),definef_b.Rows(),CV_64FC1);               \
	cvGEMM(cf,cd,1,NULL,0,cr,CV_GEMM_B_T);                                    \
	definef_mo=MatrixC(cr->rows,cr->cols,(double*)(cr->data.db));             \
}                                                                             \
	if(defienf_i==0)                                                          \
{                                                                             \
	cr=cvCreateMat(definef_a.Rows(),definef_b.Cols(),CV_64FC1);               \
	cvGEMM(cf,cd,1,NULL,0,cr);                                                \
	definef_mo=MatrixC(cr->rows,cr->cols,(double*)(cr->data.db));             \
}                                                                             \
	cvReleaseMat(&cf);                                                        \
	cvReleaseMat(&cd);                                                        \
	cvReleaseMat(&cr);                                                        \
}
#define opencv_ContractMatrixDUDTRealT(definef_D,definef_U,definef_out)    \
	opencv_gemm64FC(definef_D,definef_U,definef_out,0)                     \
	opencv_gemm64FC(definef_out,definef_D,definef_out,2)   
#endif 
